home *** CD-ROM | disk | FTP | other *** search
/ Linux Cubed Series 4: GNU Archives / Linux Cubed Series 4 - GNU Archives.iso / gnu / binutils.7 / binutils / binutils-2.7 / gas / config / obj-vms.h < prev    next >
Encoding:
C/C++ Source or Header  |  1996-07-04  |  18.3 KB  |  551 lines

  1. /* VMS object file format
  2.    Copyright (C) 1989,90,91,94,95,1996 Free Software Foundation, Inc.
  3.  
  4. This file is part of GAS, the GNU Assembler.
  5.  
  6. GAS is free software; you can redistribute it and/or modify
  7. it under the terms of the GNU General Public License as
  8. published by the Free Software Foundation; either version 2,
  9. or (at your option) any later version.
  10.  
  11. GAS is distributed in the hope that it will be useful, but
  12. WITHOUT ANY WARRANTY; without even the implied warranty of
  13. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See
  14. the GNU General Public License for more details.
  15.  
  16. You should have received a copy of the GNU General Public
  17. License along with GAS; see the file COPYING.  If not, write
  18. to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
  19.  
  20. /* Tag to validate a.out object file format processing */
  21. #define OBJ_VMS 1
  22.  
  23. #include "targ-cpu.h"
  24.  
  25. #define LONGWORD_ALIGNMENT    2
  26.  
  27. /* This macro controls subsection alignment within a section.
  28.  *
  29.  * Under VAX/VMS, the linker (and PSECT specifications)
  30.  * take care of correctly aligning the segments.
  31.  * Doing the alignment here (on initialized data) can
  32.  * mess up the calculation of global data PSECT sizes.
  33.  */
  34. #define SUB_SEGMENT_ALIGN(SEG)    \
  35.         (((SEG) == data_section) ? 0 : LONGWORD_ALIGNMENT)
  36.  
  37. /* This flag is used to remember whether we are in the const or the
  38.    data section.  By and large they are identical, but we set a no-write
  39.    bit for psects in the const section.  */
  40.  
  41. extern unsigned char const_flag;
  42.  
  43. /* This is overloaded onto const_flag, for convenience.  It's used to flag
  44.    dummy labels like "gcc2_compiled."  which occur before the first .text
  45.    or .data section directive.  */
  46.  
  47. #define IN_DEFAULT_SECTION 0x80
  48.  
  49. /* These are defined in obj-vms.c. */
  50. extern const short seg_N_TYPE[];
  51. extern const segT N_TYPE_seg[];
  52.  
  53. #undef NO_RELOC
  54. enum reloc_type
  55.   {
  56.     NO_RELOC, RELOC_32
  57.   };
  58.  
  59. #define N_BADMAG(x)    (0)
  60. #define N_TXTOFF(x)    ( sizeof(struct exec) )
  61. #define N_DATOFF(x)    ( N_TXTOFF(x) + (x).a_text )
  62. #define N_TROFF(x)    ( N_DATOFF(x) + (x).a_data )
  63. #define N_DROFF(x)    ( N_TROFF(x) + (x).a_trsize )
  64. #define N_SYMOFF(x)    ( N_DROFF(x) + (x).a_drsize )
  65. #define N_STROFF(x)    ( N_SYMOFF(x) + (x).a_syms )
  66.  
  67. /* We use this copy of the exec header for VMS.  We do not actually use it, but
  68.    what we actually do is let gas fill in the relevant slots, and when we get
  69.    around to writing an obj file, we just pick out what we need.  */
  70.  
  71. struct exec
  72. {
  73.   unsigned long a_text;        /* length of text, in bytes */
  74.   unsigned long a_data;        /* length of data, in bytes */
  75.   unsigned long a_bss;        /* length of uninitialized data area for file, in bytes */
  76.   unsigned long a_trsize;    /* length of relocation info for text, in bytes */
  77.   unsigned long a_drsize;    /* length of relocation info for data, in bytes */
  78.   unsigned long a_entry;    /* start address */
  79.   unsigned long a_syms;        /* length of symbol table data in file, in bytes */
  80. };
  81.  
  82. typedef struct
  83.   {
  84.     struct exec header;        /* a.out header */
  85.     long string_table_size;    /* names + '\0' + sizeof(int) */
  86.   }
  87. object_headers;
  88.  
  89. /* A single entry in the symbol table
  90.  * (this started as a clone of bout.h's nlist, but much was unneeded).
  91.  */
  92. struct nlist
  93.   {
  94.     char *n_name;
  95.     unsigned char n_type;    /* See below                */
  96.     unsigned char n_other;    /* used for const_flag and "default section" */
  97.     unsigned    : 16;        /* padding for alignment */
  98.     int n_desc;            /* source line number for N_SLINE stabs */
  99.   };
  100.  
  101. /* Legal values of n_type (see aout/stab.def for the majority of the codes).
  102.  */
  103. #define N_UNDF    0        /* Undefined symbol    */
  104. #define N_ABS    2        /* Absolute symbol    */
  105. #define N_TEXT    4        /* Text symbol        */
  106. #define N_DATA    6        /* Data symbol        */
  107. #define N_BSS    8        /* BSS symbol        */
  108. #define N_FN    31        /* Filename symbol    */
  109.  
  110. #define N_EXT    1        /* External symbol (OR'd in with one of above)    */
  111. #define N_TYPE    036        /* Mask for all the type bits            */
  112.  
  113. #define N_STAB    0340        /* Mask for all bits used for SDB entries     */
  114.  
  115. #include "aout/stab_gnu.h"
  116.  
  117. /* SYMBOL TABLE */
  118. /* Symbol table entry data type */
  119.  
  120. typedef struct nlist obj_symbol_type;    /* Symbol table entry */
  121.  
  122. /* Symbol table macros and constants */
  123.  
  124. #define OBJ_SYMFIELD_TYPE struct VMS_Symbol *
  125.  
  126. /*
  127.  *  Macros to extract information from a symbol table entry.
  128.  *  This syntaxic indirection allows independence regarding a.out or coff.
  129.  *  The argument (s) of all these macros is a pointer to a symbol table entry.
  130.  */
  131.  
  132. /* True if the symbol is external */
  133. #define S_IS_EXTERNAL(s)    ((s)->sy_symbol.n_type & N_EXT)
  134.  
  135. /* True if symbol has been defined, ie is in N_{TEXT,DATA,BSS,ABS} or N_EXT */
  136. #define S_IS_DEFINED(s)        (S_GET_TYPE(s) != N_UNDF)
  137.  
  138. #define S_IS_COMMON(s)    (S_GET_TYPE(s) == N_UNDF && S_GET_VALUE(s) != 0)
  139.  
  140. #define S_IS_REGISTER(s)    ((s)->sy_symbol.n_type == N_REGISTER)
  141.  
  142. /* True if a debug special symbol entry */
  143. #define S_IS_DEBUG(s)        ((s)->sy_symbol.n_type & N_STAB)
  144. /* True if a symbol is local symbol name */
  145. /* A symbol name whose name begin with ^A is a gas internal pseudo symbol
  146.    nameless symbols come from .stab directives. */
  147. #define S_IS_LOCAL(s)        (S_GET_NAME(s) && \
  148.                  !S_IS_DEBUG(s) && \
  149.                  (strchr(S_GET_NAME(s), '\001') != 0 || \
  150.                   strchr(S_GET_NAME(s), '\002') != 0 || \
  151.                   (S_LOCAL_NAME(s) && !flag_keep_locals)))
  152. /* True if a symbol is not defined in this file */
  153. #define S_IS_EXTERN(s)        ((s)->sy_symbol.n_type & N_EXT)
  154. /* True if the symbol has been generated because of a .stabd directive */
  155. #define S_IS_STABD(s)        (S_GET_NAME(s) == (char *)0)
  156.  
  157. /* Accessors */
  158. /* The name of the symbol */
  159. #define S_GET_NAME(s)        ((s)->sy_symbol.n_name)
  160. /* The pointer to the string table */
  161. #define S_GET_OFFSET(s)        ((s)->sy_name_offset)
  162. /* The raw type of the symbol */
  163. #define S_GET_RAW_TYPE(s)        ((s)->sy_symbol.n_type)
  164. /* The type of the symbol */
  165. #define S_GET_TYPE(s)        ((s)->sy_symbol.n_type & N_TYPE)
  166. /* The numeric value of the segment */
  167. #define S_GET_SEGMENT(s)    (N_TYPE_seg[S_GET_TYPE(s)])
  168. /* The n_other expression value */
  169. #define S_GET_OTHER(s)        ((s)->sy_symbol.n_other)
  170. /* The n_desc expression value */
  171. #define S_GET_DESC(s)        ((s)->sy_symbol.n_desc)
  172.  
  173. /* Modifiers */
  174. /* Assume that a symbol cannot be simultaneously in more than on segment */
  175. /* set segment */
  176. #define S_SET_SEGMENT(s,seg)    ((s)->sy_symbol.n_type &= ~N_TYPE,(s)->sy_symbol.n_type|=SEGMENT_TO_SYMBOL_TYPE(seg))
  177. /* The symbol is external */
  178. #define S_SET_EXTERNAL(s)    ((s)->sy_symbol.n_type |= N_EXT)
  179. /* The symbol is not external */
  180. #define S_CLEAR_EXTERNAL(s)    ((s)->sy_symbol.n_type &= ~N_EXT)
  181. /* Set the name of the symbol */
  182. #define S_SET_NAME(s,v)        ((s)->sy_symbol.n_name = (v))
  183. /* Set the offset in the string table */
  184. #define S_SET_OFFSET(s,v)    ((s)->sy_name_offset = (v))
  185. /* Set the n_other expression value */
  186. #define S_SET_OTHER(s,v)    ((s)->sy_symbol.n_other = (v))
  187. /* Set the n_desc expression value */
  188. #define S_SET_DESC(s,v)        ((s)->sy_symbol.n_desc = (v))
  189. /* Set the n_type expression value */
  190. #define S_SET_TYPE(s,v)        ((s)->sy_symbol.n_type = (v))
  191.  
  192.  
  193. /* File header macro and type definition */
  194.  
  195. #define H_GET_TEXT_SIZE(h)        ((h)->header.a_text)
  196. #define H_GET_DATA_SIZE(h)        ((h)->header.a_data)
  197. #define H_GET_BSS_SIZE(h)        ((h)->header.a_bss)
  198.  
  199. #define H_SET_TEXT_SIZE(h,v)        ((h)->header.a_text = md_section_align(SEG_TEXT, (v)))
  200. #define H_SET_DATA_SIZE(h,v)        ((h)->header.a_data = md_section_align(SEG_DATA, (v)))
  201. #define H_SET_BSS_SIZE(h,v)        ((h)->header.a_bss = md_section_align(SEG_BSS, (v)))
  202.  
  203. #define H_SET_STRING_SIZE(h,v)        ((h)->string_table_size = (v))
  204. #define H_SET_SYMBOL_TABLE_SIZE(h,v)    ((h)->header.a_syms = (v) * \
  205.                      sizeof(struct nlist))
  206.  
  207. /* line numbering stuff. */
  208. #define OBJ_EMIT_LINENO(a, b, c)    {;}
  209.  
  210. #define obj_symbol_new_hook(s)    {;}
  211.  
  212. /* Force structure tags into scope so that their use in prototypes
  213.    will never be their first occurance.  */
  214. struct fix;
  215. struct symbol;
  216. struct frag;
  217.  
  218. /* obj-vms routines visible to the rest of gas.  */
  219.  
  220. extern void tc_aout_fix_to_chars PARAMS ((char *,struct fix *,relax_addressT));
  221.  
  222. extern int vms_resolve_symbol_redef PARAMS ((struct symbol *));
  223. #define RESOLVE_SYMBOL_REDEFINITION(X)    vms_resolve_symbol_redef(X)
  224.  
  225. /* Compiler-generated label "__vax_g_doubles" is used to augment .stabs. */
  226. extern void vms_check_for_special_label PARAMS ((struct symbol *));
  227. #define tc_frob_label(X) vms_check_for_special_label(X)
  228.  
  229. extern void vms_check_for_main PARAMS ((void));
  230.  
  231. extern void vms_write_object_file PARAMS ((unsigned,unsigned,unsigned,
  232.                        struct frag *,struct frag *));
  233.  
  234. /* VMS executables are nothing like a.out, but the VMS port of gcc uses
  235.    a.out format stabs which obj-vms.c then translates.  */
  236.  
  237. #define AOUT_STABS
  238.  
  239.  
  240. #ifdef WANT_VMS_OBJ_DEFS
  241.  
  242. /* The rest of this file contains definitions for constants used within
  243.    the actual VMS object file.  We do not use a $ in the symbols (as per
  244.    usual VMS convention) since System V gags on it.  */
  245.  
  246. #define    OBJ_S_C_HDR    0
  247. #define    OBJ_S_C_HDR_MHD    0
  248. #define    OBJ_S_C_HDR_LNM    1
  249. #define    OBJ_S_C_HDR_SRC    2
  250. #define    OBJ_S_C_HDR_TTL    3
  251. #define    OBJ_S_C_HDR_CPR    4
  252. #define    OBJ_S_C_HDR_MTC    5
  253. #define    OBJ_S_C_HDR_GTX    6
  254. #define    OBJ_S_C_GSD    1
  255. #define    OBJ_S_C_GSD_PSC    0
  256. #define    OBJ_S_C_GSD_SYM    1
  257. #define    OBJ_S_C_GSD_EPM    2
  258. #define    OBJ_S_C_GSD_PRO    3
  259. #define    OBJ_S_C_GSD_SYMW    4
  260. #define    OBJ_S_C_GSD_EPMW    5
  261. #define    OBJ_S_C_GSD_PROW    6
  262. #define    OBJ_S_C_GSD_IDC    7
  263. #define    OBJ_S_C_GSD_ENV    8
  264. #define    OBJ_S_C_GSD_LSY    9
  265. #define    OBJ_S_C_GSD_LEPM    10
  266. #define    OBJ_S_C_GSD_LPRO    11
  267. #define    OBJ_S_C_GSD_SPSC    12
  268. #define    OBJ_S_C_TIR    2
  269. #define    OBJ_S_C_EOM    3
  270. #define    OBJ_S_C_DBG    4
  271. #define    OBJ_S_C_TBT    5
  272. #define    OBJ_S_C_LNK    6
  273. #define    OBJ_S_C_EOMW    7
  274. #define    OBJ_S_C_MAXRECTYP    7
  275. #define    OBJ_S_K_SUBTYP    1
  276. #define    OBJ_S_C_SUBTYP    1
  277. #define    OBJ_S_C_MAXRECSIZ    2048
  278. #define    OBJ_S_C_STRLVL    0
  279. #define    OBJ_S_C_SYMSIZ    31
  280. #define    OBJ_S_C_STOREPLIM    -1
  281. #define    OBJ_S_C_PSCALILIM    9
  282.  
  283. #define    MHD_S_C_MHD    0
  284. #define    MHD_S_C_LNM    1
  285. #define    MHD_S_C_SRC    2
  286. #define    MHD_S_C_TTL    3
  287. #define    MHD_S_C_CPR    4
  288. #define    MHD_S_C_MTC    5
  289. #define    MHD_S_C_GTX    6
  290. #define    MHD_S_C_MAXHDRTYP    6
  291.  
  292. #define    GSD_S_K_ENTRIES    1
  293. #define    GSD_S_C_ENTRIES    1
  294. #define    GSD_S_C_PSC    0
  295. #define    GSD_S_C_SYM    1
  296. #define    GSD_S_C_EPM    2
  297. #define    GSD_S_C_PRO    3
  298. #define    GSD_S_C_SYMW    4
  299. #define    GSD_S_C_EPMW    5
  300. #define    GSD_S_C_PROW    6
  301. #define    GSD_S_C_IDC    7
  302. #define    GSD_S_C_ENV    8
  303. #define    GSD_S_C_LSY    9
  304. #define    GSD_S_C_LEPM    10
  305. #define    GSD_S_C_LPRO    11
  306. #define    GSD_S_C_SPSC    12
  307. #define    GSD_S_C_SYMV    13
  308. #define    GSD_S_C_EPMV    14
  309. #define    GSD_S_C_PROV    15
  310. #define    GSD_S_C_MAXRECTYP    15
  311.  
  312. #define    GSY_S_M_WEAK    1
  313. #define    GSY_S_M_DEF    2
  314. #define    GSY_S_M_UNI    4
  315. #define    GSY_S_M_REL    8
  316.  
  317. #define    LSY_S_M_DEF    2
  318. #define    LSY_S_M_REL    8
  319.  
  320. #define    ENV_S_M_DEF    1
  321. #define    ENV_S_M_NESTED    2
  322.  
  323. #define    GPS_S_M_PIC    1
  324. #define    GPS_S_M_LIB    2
  325. #define    GPS_S_M_OVR    4
  326. #define    GPS_S_M_REL    8
  327. #define    GPS_S_M_GBL    16
  328. #define    GPS_S_M_SHR    32
  329. #define    GPS_S_M_EXE    64
  330. #define    GPS_S_M_RD    128
  331. #define    GPS_S_M_WRT    256
  332. #define    GPS_S_M_VEC    512
  333. #define    GPS_S_K_NAME    9
  334. #define    GPS_S_C_NAME    9
  335.  
  336. #define    TIR_S_C_STA_GBL    0
  337. #define    TIR_S_C_STA_SB    1
  338. #define    TIR_S_C_STA_SW    2
  339. #define    TIR_S_C_STA_LW    3
  340. #define    TIR_S_C_STA_PB    4
  341. #define    TIR_S_C_STA_PW    5
  342. #define    TIR_S_C_STA_PL    6
  343. #define    TIR_S_C_STA_UB    7
  344. #define    TIR_S_C_STA_UW    8
  345. #define    TIR_S_C_STA_BFI    9
  346. #define    TIR_S_C_STA_WFI    10
  347. #define    TIR_S_C_STA_LFI    11
  348. #define    TIR_S_C_STA_EPM    12
  349. #define    TIR_S_C_STA_CKARG    13
  350. #define    TIR_S_C_STA_WPB    14
  351. #define    TIR_S_C_STA_WPW    15
  352. #define    TIR_S_C_STA_WPL    16
  353. #define    TIR_S_C_STA_LSY    17
  354. #define    TIR_S_C_STA_LIT    18
  355. #define    TIR_S_C_STA_LEPM    19
  356. #define    TIR_S_C_MAXSTACOD    19
  357. #define    TIR_S_C_MINSTOCOD    20
  358. #define    TIR_S_C_STO_SB    20
  359. #define    TIR_S_C_STO_SW    21
  360. #define    TIR_S_C_STO_L    22
  361. #define    TIR_S_C_STO_BD    23
  362. #define    TIR_S_C_STO_WD    24
  363. #define    TIR_S_C_STO_LD    25
  364. #define    TIR_S_C_STO_LI    26
  365. #define    TIR_S_C_STO_PIDR    27
  366. #define    TIR_S_C_STO_PICR    28
  367. #define    TIR_S_C_STO_RSB    29
  368. #define    TIR_S_C_STO_RSW    30
  369. #define    TIR_S_C_STO_RL    31
  370. #define    TIR_S_C_STO_VPS    32
  371. #define    TIR_S_C_STO_USB    33
  372. #define    TIR_S_C_STO_USW    34
  373. #define    TIR_S_C_STO_RUB    35
  374. #define    TIR_S_C_STO_RUW    36
  375. #define    TIR_S_C_STO_B    37
  376. #define    TIR_S_C_STO_W    38
  377. #define    TIR_S_C_STO_RB    39
  378. #define    TIR_S_C_STO_RW    40
  379. #define    TIR_S_C_STO_RIVB    41
  380. #define    TIR_S_C_STO_PIRR    42
  381. #define    TIR_S_C_MAXSTOCOD    42
  382. #define    TIR_S_C_MINOPRCOD    50
  383. #define    TIR_S_C_OPR_NOP    50
  384. #define    TIR_S_C_OPR_ADD    51
  385. #define    TIR_S_C_OPR_SUB    52
  386. #define    TIR_S_C_OPR_MUL    53
  387. #define    TIR_S_C_OPR_DIV    54
  388. #define    TIR_S_C_OPR_AND    55
  389. #define    TIR_S_C_OPR_IOR    56
  390. #define    TIR_S_C_OPR_EOR    57
  391. #define    TIR_S_C_OPR_NEG    58
  392. #define    TIR_S_C_OPR_COM    59
  393. #define    TIR_S_C_OPR_INSV    60
  394. #define    TIR_S_C_OPR_ASH    61
  395. #define    TIR_S_C_OPR_USH    62
  396. #define    TIR_S_C_OPR_ROT    63
  397. #define    TIR_S_C_OPR_SEL    64
  398. #define    TIR_S_C_OPR_REDEF    65
  399. #define    TIR_S_C_OPR_DFLIT    66
  400. #define    TIR_S_C_MAXOPRCOD    66
  401. #define    TIR_S_C_MINCTLCOD    80
  402. #define    TIR_S_C_CTL_SETRB    80
  403. #define    TIR_S_C_CTL_AUGRB    81
  404. #define    TIR_S_C_CTL_DFLOC    82
  405. #define    TIR_S_C_CTL_STLOC    83
  406. #define    TIR_S_C_CTL_STKDL    84
  407. #define    TIR_S_C_MAXCTLCOD    84
  408.  
  409. /*
  410.  *    Debugger symbol definitions:  These are done by hand, as no
  411.  *                    machine-readable version seems
  412.  *                    to be available.
  413.  */
  414. #define DST_S_C_C      7    /* Language == "C"    */
  415. #define DST_S_C_CXX     15    /* Language == "C++"    */
  416. #define DST_S_C_VERSION    153
  417. #define    DST_S_C_SOURCE    155    /* Source file        */
  418. #define DST_S_C_PROLOG    162
  419. #define    DST_S_C_BLKBEG    176    /* Beginning of block    */
  420. #define    DST_S_C_BLKEND    177    /* End of block    */
  421. #define DST_S_C_ENTRY    181
  422. #define DST_S_C_PSECT    184
  423. #define    DST_S_C_LINE_NUM    185    /* Line Number        */
  424. #define DST_S_C_LBLORLIT    186
  425. #define DST_S_C_LABEL    187
  426. #define    DST_S_C_MODBEG    188    /* Beginning of module    */
  427. #define    DST_S_C_MODEND    189    /* End of module    */
  428. #define    DST_S_C_RTNBEG    190    /* Beginning of routine    */
  429. #define    DST_S_C_RTNEND    191    /* End of routine    */
  430. #define    DST_S_C_DELTA_PC_W    1    /* Incr PC    */
  431. #define    DST_S_C_INCR_LINUM    2    /* Incr Line #    */
  432. #define    DST_S_C_INCR_LINUM_W    3    /* Incr Line #    */
  433. #define DST_S_C_SET_LINUM_INCR    4
  434. #define DST_S_C_SET_LINUM_INCR_W    5
  435. #define DST_S_C_RESET_LINUM_INCR    6
  436. #define DST_S_C_BEG_STMT_MODE    7
  437. #define DST_S_C_END_STMT_MODE    8
  438. #define    DST_S_C_SET_LINE_NUM    9    /* Set Line #    */
  439. #define DST_S_C_SET_PC        10
  440. #define DST_S_C_SET_PC_W        11
  441. #define DST_S_C_SET_PC_L        12
  442. #define DST_S_C_SET_STMTNUM    13
  443. #define DST_S_C_TERM        14    /* End of lines    */
  444. #define DST_S_C_TERM_W        15    /* End of lines    */
  445. #define    DST_S_C_SET_ABS_PC    16    /* Set PC    */
  446. #define    DST_S_C_DELTA_PC_L    17    /* Incr PC    */
  447. #define DST_S_C_INCR_LINUM_L    18    /* Incr Line #    */
  448. #define DST_S_C_SET_LINUM_B    19    /* Set Line #    */
  449. #define DST_S_C_SET_LINUM_L    20    /* Set Line #    */
  450. #define    DST_S_C_TERM_L        21    /* End of lines    */
  451. /* these are used with DST_S_C_SOURCE */
  452. #define DST_S_C_SRC_DECLFILE     1    /* Declare source file */
  453. #define DST_S_C_SRC_SETFILE     2    /* Set source file */
  454. #define DST_S_C_SRC_SETREC_L     3    /* Set record, longword value */
  455. #define DST_S_C_SRC_SETREC_W     4    /* Set record, word value */
  456. #define DST_S_C_SRC_DEFLINES_W    10    /* # of line, word counter */
  457. #define DST_S_C_SRC_DEFLINES_B    11    /* # of line, byte counter */
  458. #define DST_S_C_SRC_FORMFEED    16    /* ^L counts as a record */
  459. /* the following are the codes for the various data types.  Anything not on
  460.  * the list is included under 'advanced_type'
  461.  */
  462. #define DBG_S_C_UCHAR        0x02
  463. #define DBG_S_C_USINT        0x03
  464. #define DBG_S_C_ULINT        0x04
  465. #define DBG_S_C_UQUAD        0x05
  466. #define DBG_S_C_SCHAR        0x06
  467. #define DBG_S_C_SSINT        0x07
  468. #define DBG_S_C_SLINT        0x08
  469. #define DBG_S_C_SQUAD        0x09
  470. #define DBG_S_C_REAL4        0x0a
  471. #define DBG_S_C_REAL8        0x0b        /* D_float double */
  472. #define DBG_S_C_COMPLX4        0x0c        /* 2xF_float complex float */
  473. #define DBG_S_C_COMPLX8        0x0d        /* 2xD_float complex double */
  474. #define DBG_S_C_REAL8_G        0x1b        /* G_float double */
  475. #define DBG_S_C_COMPLX8_G    0x1d        /* 2xG_float complex double */
  476. #define DBG_S_C_FUNCTION_ADDR    0x17
  477. #define DBG_S_C_ADVANCED_TYPE    0xa3
  478. /*  Some of these are just for future reference.  [pr]
  479.  */
  480. #define DBG_S_C_UBITA        0x01    /* unsigned, aligned bit field */
  481. #define DBG_S_C_UBITU        0x22    /* unsigned, unaligned bit field */
  482. #define DBG_S_C_SBITA        0x29    /* signed, aligned bit field */
  483. #define DBG_S_C_SBITU        0x2a    /* signed, unaligned bit field */
  484. #define DBG_S_C_CSTRING        0x2e    /* asciz ('\0' terminated) string */
  485. #define DBG_S_C_WCHAR        0x38    /* wchar_t */
  486. /*  These are descriptor class codes.
  487.  */
  488. #define DSC_K_CLASS_S        0x01    /* static (fixed length) */
  489. #define DSC_K_CLASS_D        0x02    /* dynamic string (not via malloc!) */
  490. #define DSC_K_CLASS_A        0x04    /* array */
  491. #define DSC_K_CLASS_UBS        0x0d    /* unaligned bit string */
  492. /*  These are the codes that are used to generate the definitions of struct
  493.  *  union and enum records
  494.  */
  495. #define DBG_S_C_ENUM_ITEM        0xa4
  496. #define DBG_S_C_ENUM_START        0xa5
  497. #define DBG_S_C_ENUM_END        0xa6
  498. #define DBG_S_C_STRUCT_ITEM        DST_K_VFLAGS_BITOFFS    /* 0xff */
  499. #define DBG_S_C_STRUCT_START        0xab
  500. #define DBG_S_C_STRUCT_END        0xac
  501. #define DST_K_TYPSPEC            0xaf        /* type specification */
  502. /* These codes are used in the generation of the symbol definition records
  503.  */
  504. #define DST_K_VFLAGS_NOVAL        0x80    /* struct definition only */
  505. #define DST_K_VFLAGS_DSC        0xfa    /* descriptor used */
  506. #define DST_K_VFLAGS_TVS        0xfb    /* trailing value specified */
  507. #define DST_K_VS_FOLLOWS        0xfd    /* value spec follows */
  508. #define DST_K_VFLAGS_BITOFFS        0xff    /* value contains bit offset */
  509. #define DST_K_VALKIND_LITERAL    0
  510. #define DST_K_VALKIND_ADDR    1
  511. #define DST_K_VALKIND_DESC    2
  512. #define DST_K_VALKIND_REG    3
  513. #define DST_K_REG_VAX_AP    0x0c    /* R12 */
  514. #define DST_K_REG_VAX_FP    0x0d    /* R13 */
  515. #define DST_K_REG_VAX_SP    0x0e    /* R14 */
  516. #define DST_V_VALKIND        0    /* offset of valkind field */
  517. #define DST_V_INDIRECT        2    /* offset to indirect bit */
  518. #define DST_V_DISP        3    /* offset to displacement bit */
  519. #define DST_V_REGNUM        4    /* offset to register number */
  520. #define DST_M_INDIRECT        (1<<DST_V_INDIRECT)
  521. #define DST_M_DISP        (1<<DST_V_DISP)
  522. #define DBG_C_FUNCTION_PARAM    /* 0xc9 */    \
  523.     (DST_K_VALKIND_ADDR|DST_M_DISP|(DST_K_REG_VAX_AP<<DST_V_REGNUM))
  524. #define DBG_C_LOCAL_SYM        /* 0xd9 */    \
  525.     (DST_K_VALKIND_ADDR|DST_M_DISP|(DST_K_REG_VAX_FP<<DST_V_REGNUM))
  526. /* Kinds of value specifications
  527.  */
  528. #define DST_K_VS_ALLOC_SPLIT    3    /* split lifetime */
  529. /* Kinds of type specifications
  530.  */
  531. #define DST_K_TS_ATOM        0x01    /* atomic type specification */
  532. #define DST_K_TS_DSC        0x02    /* descriptor type spec */
  533. #define DST_K_TS_IND        0x03    /* indirect type specification */
  534. #define DST_K_TS_TPTR        0x04    /* typed pointer type spec */
  535. #define DST_K_TS_PTR        0x05    /* pointer type spec */
  536. #define DST_K_TS_ARRAY        0x07    /* array type spec */
  537. #define DST_K_TS_NOV_LENG    0x0e    /* novel length type spec */
  538. /*  These are the codes that are used in the suffix records to determine the
  539.  *  actual data type
  540.  */
  541. #define DBG_S_C_BASIC            DST_K_TS_ATOM
  542. #define DBG_S_C_BASIC_ARRAY        DST_K_TS_DSC
  543. #define DBG_S_C_STRUCT            DST_K_TS_IND
  544. #define DBG_S_C_POINTER            DST_K_TS_TPTR
  545. #define DBG_S_C_VOID            DST_K_TS_PTR
  546. #define DBG_S_C_COMPLEX_ARRAY        DST_K_TS_ARRAY
  547.  
  548. #endif    /* WANT_VMS_OBJ_DEFS */
  549.  
  550. /* end of obj-vms.h */
  551.